<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>面向对象</title>
</head>
<body>
    
</body>
<script>
    /*
    创建对象
    */
    // 1.方式1 字面量创建对象
    var stu = {
        name:'dgq',
        age: 17
    }
    console.log(stu.name);
    console.log(stu)

    // 2.方式2 构造函数（首字母大写）
    function Star(name,age){
        console.log(this);  // 构造函数中的this指向构造函数的实例
        this.name = name;
        this.age = age;
    }
    var dyp = new Star('邓亚萍',54);  // 实例化对象
    console.log(dyp)

    console.log('*******创建类*********')
    /*
        创建类
    */
    // 1.类名的首字母大写 class
    class Children{ 
        // 2.共有属性 constructor，构造函数
        constructor(name,age){
            console.log(this)
            this.name = name;
            this.age = age;
            console.log('我叫'+this.name+'，我今年：'+this.age+'岁了');
        }  // 无逗号
        love(content){
            console.log(this);
            console.log(this.name+'爱'+content)
        }

    }
    // 3.new 实例化的对象
    var child = new Children('王诗龄',15,'吃');
    child.love('吃')
    var child2 = new Children('森碟',14);
    child2.love('游泳')
    var child3 = new Children('天天',16);
    child3.love('做饭')
    console.log(child)

    console.log('%%%%%%%%%%% 继承 %%%%%%%%%%%')
    /*
        继承
    */
    class Father{ // 定义父类
        constructor(familyName){
            this.familyName = familyName
            console.log('super关键字传过来familyName'+this.familyName)
        }
        say(){
            console.log('我们是'+this.familyName+'家族')
        }
    }
    // var father = new Father('那拉氏');
    // father.say();

    // class Son{

    // }
    // var son = new Son('爱新觉罗');
    // son.say();
    class Son extends Father{ // 子类继承extends父类
        constructor(familyName,lastName){
            // 使用super() 调用父类构造函数，解决子类存在特有的属性，并且super() 必须在子类之前调用，之后调用会报错
            super(familyName);
            this.lastName = lastName;
            
        }
        say(){ // 子类和父类都有方法，优先执行子类的方法，如果子类没有就执行父类的
            console.log('我是子类的方法')
        }
    }
    var son = new Son('爱新觉罗');
    son.say();

    console.log('^^^^^^^^^加法操作^^^^^^^^^^^')


</script>
</html>